As you are analyzing your documents, you may wonder if there is a way to create a word frequency list. In other words, you may want to generate a list of every unique word in your document, along with the number of times it appears.
Unfortunately, Word doesn't include such a feature. You can, however, create your own using a macro. The following VBA macro is an example:
Sub WordFrequency()
Dim SingleWord As String 'Raw word pulled from doc
Const maxwords = 9000 'Maximum unique words allowed
Dim Words(maxwords) As String 'Array to hold unique words
Dim Freq(maxwords) As Integer 'Frequency counter for unique words
Dim WordNum As Integer 'Number of unique words
Dim ByFreq As Boolean 'Flag for sorting order
Dim ttlwds As Long 'Total words in the document
Dim Excludes As String 'Words to be excluded
Dim Found As Boolean 'Temporary flag
Dim j As Integer 'Temporary variables
Dim k As Integer '
Dim l As Integer '
Dim Temp As Integer '
Dim tword As String '
' Set up excluded words
Excludes = "[the][a][of][is][to][for][this][that][by][be][and][are]"
' Find out how to sort
ByFreq = True
ans = InputBox$("Sort by WORD or by FREQ?", "Sort order", "WORD")
If ans = "" Then End
If UCase(ans) = "WORD" Then
ByFreq = False
End If
Selection.HomeKey Unit:=wdStory
System.Cursor = wdCursorWait
WordNum = 0
ttlwds = ActiveDocument.Words.Count
' Control the repeat
For Each aword In ActiveDocument.Words
SingleWord = Trim(LCase(aword))
If SingleWord < "a" Or SingleWord > "z" Then SingleWord = "" 'Out of range?
If InStr(Excludes, "[" & SingleWord & "]") Then SingleWord = "" 'On exclude list?
If Len(SingleWord) > 0 Then
Found = False
For j = 1 To WordNum
If Words(j) = SingleWord Then
Freq(j) = Freq(j) + 1
Found = True
Exit For
End If
Next j
If Not Found Then
WordNum = WordNum + 1
Words(WordNum) = SingleWord
Freq(WordNum) = 1
End If
If WordNum > maxwords - 1 Then
j = MsgBox("Maximum array size exceeded. Increase maxwords.", vbOKOnly)
Exit For
End If
End If
ttlwds = ttlwds - 1
StatusBar = "Remaining: " & ttlwds & " Unique: " & WordNum
Next aword
' Now sort it into word order
For j = 1 To WordNum - 1
k = j
For l = j + 1 To WordNum
If (Not ByFreq And Words(l) < Words(k)) Or
(ByFreq And Freq(l) > Freq(k)) Then k = l
Next l
If k <> j Then
tword = Words(j)
Words(j) = Words(k)
Words(k) = tword
Temp = Freq(j)
Freq(j) = Freq(k)
Freq(k) = Temp
End If
StatusBar = "Sorting: " & WordNum - j
Next j
' Now write out the results
tmpName = ActiveDocument.AttachedTemplate.FullName
Documents.Add Template:=tmpName, NewTemplate:=False
Selection.ParagraphFormat.TabStops.ClearAll
With Selection
For j = 1 To WordNum
.TypeText Text:=Trim(Str(Freq(j))) & vbTab & Words(j) & vbCrLf
Next j
End With
System.Cursor = wdCursorNormal
j = MsgBox("There were " & Trim(Str(WordNum)) & _
" different words ", vbOKOnly, "Finished")
End Sub
When you open a document and run this macro, you are asked if you want to create a list sorted by word or by frequency. If you choose word, then the resulting list is shown in alphabetical order. If you choose frequency, then the resulting list is in descending order based on how many times the word appeared in the document.
While the macro is running, the status bar indicates what is happening. Depending on the size of your document and the speed of your computer, the macro may take a while to complete. (I ran it with a 719-page document with over 349,000 words and it took about five minutes to complete.)
Note that there is a line in the macro that sets a value in the Excludes string. This string contains words that the macro will ignore when putting together the word list. If you want to add words to the list, simply add them to the string, between [square brackets]. Also, make sure the exclusion words are in lowercase.
Note:
WordTips is your source for cost-effective Microsoft Word training. (Microsoft Word is the most popular word processing software in the world.) This tip (879) applies to Microsoft Word 97, 2000, 2002, and 2003.
Learning Made Easy! Quickly teach yourself how to format, publish, and share your content using Word 2021 or Microsoft 365. With Step by Step, you set the pace, building and practicing the skills you need, just when you need them! Check out Microsoft Word Step by Step today!
Need to figure out the number of characters in a range of selected text? Here's how to do it in VBA.
Discover MoreDo you need to step through a table, cell by cell, in a macro? It's easy to do using the Move method, as described in ...
Discover MoreWhen writing a macro, you may need a way to clear the undo stack. This can be done with a single command, as described in ...
Discover MoreFREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."
2023-04-12 06:31:22
Mike
Installed your WordFrequency macro and it works great (almost). I'm a retired programmer but never did any VBA. Followed your links to how to use your macros and how to write a macro from scratch and it was easy to get this one working.nI'm using 2019 and it gave me an error message the first time I ran it on the same IF statement that gave Roy a problem in Word for Mac:n If (Not ByFreq And Words(l) < Words(k)) Or n (ByFreq And Freq(l) > Freq(k)) Then k = lnI put it all on one line and it worked fine. I suspect that whatever you're using to indicate the statement continues on the next line is getting lost when it gets put into the webpage box. It worked fine as:n If (Not ByFreq And Words(l) < Words(k)) Or (ByFreq And Freq(l) > Freq(k)) Then k = l
2022-12-03 00:59:42
Roy
Hi, I got a compile error in Word for Mac, had to add an extra surrounding pair of parens to:nnIf (Not ByFreq And Words(l) < Words(k)) Or n (ByFreq And Freq(l) > Freq(k)) Then k = lnniennIf ((Not ByFreq And Words(l) < Words(k)) Or (ByFreq And Freq(l) > Freq(k))) Then k = lnnTHANKS for this tool by the way. It was quick and easy to implement.
2022-09-20 09:35:41
Allen
Rana & Kim, I have no idea how that error got in there. The line used a continuation sequence (space, underscore) improperly. You cannot use the sequence in the middle of quoted text.nnI fixed the code shown above so you should not have the issue.nn-Allen
2022-09-19 21:08:54
Kim
I'm having the same error:nnCompile errornSyntax errornnj = MsgBox("The maximum array size has been exceeded. _nIncrease maxwords.", vbOKOnly)nnI'm using Word 365. How do I fix? I can't seem to find a single macro for this purpose that functions properly in Word 365.
2022-04-18 13:03:11
Rana
I get a syntax error when I use your above code.nCompile errornSyntax errornnj = MsgBox("The maximum array size has been exceeded. _nIncrease maxwords.", vbOKOnly)
2018-06-05 13:08:44
Julie
The list formatted oddly when I ran the macro as written (due to the template used for the original document). I altered the macro to put the list in a document based on the Normal template.nnUnder ' Now write out the resultsnI removedn tmpName = ActiveDocument.AttachedTemplate.FullNamen Documents.Add Template:=tmpName, NewTemplate:=FalsennAnd replaced it withn Documents.AddnnJust in case anyone else is wanting to do that.
2018-02-07 22:47:04
Eugene
I have a product which I created from an operating system where I had 55 pages with 8 columns, headers/footers, pages breaks etc. nnI managed to create VBAs where I'm just left with one column, 15 pages, no headers/Footers, pages breaks etc. nnI would love to know if I can modify the link you referenced since the one currently lists the first and last names separately. Ideally I would like to compare the first and last names as one with the duplicates appearing on the new page created.nnFor example I have a list of nothing but names: Sheridan, Whiteside; Jane, Doe; John, Doe. etc. The last and first names are separated by a comma. It is the whole name I want to compare leaving the duplicates, first and last names on the sheet that was created. nnThank you, Eugene
2017-09-22 06:05:31
Ken Endacott
JohnnnSee the tip and discussions at:nhttps://wordribbon.tips.net/T010761_Generating_a_Count_of_Word_Occurrencesn
2017-09-21 15:05:38
John
is it possible to have the macro only list if a word is used more than once?
Got a version of Word that uses the menu interface (Word 97, Word 2000, Word 2002, or Word 2003)? This site is for you! If you use a later version of Word, visit our WordTips site focusing on the ribbon interface.
Visit the WordTips channel on YouTube
FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."
Copyright © 2026 Sharon Parq Associates, Inc.
Comments